package design;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Li_yizYa
 * Date: 2025/8/31
 * Time: 14:10
 */

/**
 * 类适配器
 */
// 目标接口(Target): 客户端期望的接口
//interface TypeC {
//    void request();
//}
//
//// 被适配者(Adaptee): USB接口，不兼容的类
//class USB {
//    public void specialRequest() {
//        System.out.println("USB 接口");
//    }
//}

//// 类适配器: 通过继承被适配者
//class ClassAdapter extends USB implements TypeC {
//
//    @Override
//    public void request() {
//        super.specialRequest();
//        System.out.println("(类适配器)将 USB 接口转换为 TypeC接口");
//    }
//}
//
//// 客户端，华为手机需要TypeC接口充电
//public class AdapterPatternDemo { // 客户端只依赖目标接口
//    public static void main(String[] args) {
//        TypeC typeC = new ClassAdapter();
//        typeC.request();
//    }
//}

// 目标接口(Target): 客户端期望的接口
interface TypeC {
    void request();
}

// 被适配者(Adaptee): USB接口，不兼容的类
class USB {
    public void specialRequest() {
        System.out.println("USB 接口");
    }
}

// 对象适配器, 持有被适配者的对象, 实现目标接口
class ClassAdapter implements TypeC {

    // 核心: 持有一个被适配者的实例
    private USB usb;

    // 通过构造函数注入被适配对象
    public ClassAdapter(USB usb) {
        this.usb = usb;
    }

    @Override
    public void request() {
        usb.specialRequest();
        System.out.println("(类适配器)将 USB 接口转换为 TypeC接口");
    }
}
// 客户端，华为手机需要TypeC接口充电
public class AdapterPatternDemo { // 客户端只依赖目标接口
    public static void main(String[] args) {
        USB usb = new USB();
        TypeC typeC = new ClassAdapter(usb);
        typeC.request();
    }
}